package com.ningxun.pagent.bus.service;

import java.util.List;
import com.ningxun.pagent.bus.domain.BusPolicyContent;

/**
 * 政策内容Service接口
 * 
 * @author pagent
 * @date 2025-07-10
 */
public interface IBusPolicyContentService 
{
    /**
     * 查询政策内容
     * 
     * @param policyId 政策内容主键
     * @return 政策内容
     */
    public BusPolicyContent selectBusPolicyContentByPolicyId(Long policyId);

    /**
     * 查询政策内容列表
     * 
     * @param busPolicyContent 政策内容
     * @return 政策内容集合
     */
    public List<BusPolicyContent> selectBusPolicyContentList(BusPolicyContent busPolicyContent);

    /**
     * 新增政策内容
     * 
     * @param busPolicyContent 政策内容
     * @return 结果
     */
    public int insertBusPolicyContent(BusPolicyContent busPolicyContent);

    /**
     * 修改政策内容
     * 
     * @param busPolicyContent 政策内容
     * @return 结果
     */
    public int updateBusPolicyContent(BusPolicyContent busPolicyContent);

    /**
     * 修改政策内容（包含工作流逻辑）
     * 如果当前为"待提交"状态，修改后自动流转到"审批"节点
     * 
     * @param busPolicyContent 政策内容
     * @return 结果
     */
    public int updateBusPolicyContentWithWorkflow(BusPolicyContent busPolicyContent);

    /**
     * 批量删除政策内容
     * 
     * @param policyIds 需要删除的政策内容主键集合
     * @return 结果
     */
    public int deleteBusPolicyContentByPolicyIds(Long[] policyIds);

    /**
     * 删除政策内容信息
     * 
     * @param policyId 政策内容主键
     * @return 结果
     */
    public int deleteBusPolicyContentByPolicyId(Long policyId);

    //定时任务：校验过期
    void checkExpire();


    /**
     * 根据政策ID列表查询政策内容列表
     *
     * @param policyIds 政策ID列表
     * @return 政策内容集合
     */
    public List<BusPolicyContent> selectBusPolicyContentByPolicyIdList(List<Long> policyIds);



    /**
     * 提交政策审核
     * @param policyId
     * @param approveStatus
     * @return
     */
    public int submit(Long policyId, Long approveStatus);

    /**
     * 处理政策审核
     * @param busPolicyContent
     * @param skipType
     * @param taskId
     * @param message
     * @param nodeCode
     * @param flowStatus
     * @return
     */
    public int handle(BusPolicyContent busPolicyContent, String skipType, Long taskId,
                                      String message, String nodeCode, String flowStatus);

    /**
     * 驳回到上一个任务
     *
     * @param busPolicyContent
     * @param taskId
     * @param message
     * @param flowStatus 自定义流程状态扩展
     */
      public int rejectLast(BusPolicyContent busPolicyContent, Long taskId, String message, String flowStatus);

      //前端 根据id查详情
      public BusPolicyContent selectFrontBusPolicyContentByPolicyId(Long policyId);

    List<BusPolicyContent> selectLatestPolicies(int limit);
}
